#!/usr/bin/env bash
#根据模板创建新工程
#如果带有参数，那么参数作为文件夹名称，并将template下面的文件拷贝过来，同时
#将路径保存到 $STORE_LAST_FILE 文件，下次使用 ./mk 将会直接运行新建的项目


## 参数配置 ###
EDITOR=""   #编辑器选择 新建时自动使用这个编辑器打开文件
STORE_LAST_FILE=".dir.file"  #存储上一次使用mk脚本建立的脚本文件路径


rootDir=$(dirname $0)
cd $rootDir
#############################################################
#函数 ReadIni_pro 
#读取ini文件
#参数1：ini文件
#参数2：Section
#参数3：option / key
#当找到匹配的key时，返回状态码：0，并 echo 结果 ，否则返回状态码 ：2 
#该版本会自动过滤注释，查找时不会超过 section 段
function ReadIni_pro(){
    iniFile=$1 && Section=$2 && Key=$3 
    startLine=$(grep -n "\[$Section\]" $iniFile | cut -d ':' -f1)
    test ${#startLine} -eq  0 && return 2
    endLine=$(cat $iniFile | tail -n +$startLine | grep -n "\[*\]" | sed -n '2p' | cut -d ':' -f1)
    test ${#endLine} -eq 0 && endLine=$(cat $iniFile | wc -l)
    var=$(tail -n +$startLine $iniFile|head -$endLine|\
    awk -F '=' '/\['$Section'\]/{a=1}a==1&&$1~/'$Key'/{print $2;exit}')
    var=$(echo $var | cut -d'#' -f1)  #去除 # 注释部分
    var=$(echo $var | cut -d';' -f1)  #去除 ； 注释部分
    test ${#var} -gt  0 && echo $var  || return 2 #找到值就echo 否则返回代码 1 
} 

if [ -f conf.ini ] ;then #存在配置文件，读取配置文件 conf.ini
	EDITOR=$(ReadIni_pro conf.ini mk Editor)
	test $? -gt 0 && EDITOR=""
fi 


#新建项目时打开项目的编辑器
editPrj(){
	if [ ${#EDITOR} -eq 0 ];then
		return
	fi
	#return  #阻止打开编辑器
	eval $EDITOR $*
	if [[ $? -eq 0 ]] ;then 
		echo "成功打开编辑器！"
	else
		echo "打开编辑器失败！"
	fi 
}
#这里使用 文件 “.rootdir”作为根目录标志文件，该函数将会找到该路径
#若找不到，将会返回当前路径
findRootDir(){
    dstRootFlag=".rootdir"
    dir=$(pwd)
    rootDir=$dir
    while test ${#rootDir} -gt 0
    do
        cd $rootDir
        if [ -f $dstRootFlag ];then
            pwd   #找到根目录，显示根目录路径
            return 
        fi
        rootDir=${rootDir%/*}
    done
    echo $dir
}
#输入为空参数执行上一次的项目
if [[ $# -eq 0 ]];then
	lastExeFile=$(cat $STORE_LAST_FILE)
	chmod +x $lastExeFile
	echo "当前执行的文件为: $lastExeFile"
	echo
	echo "------------- Lua console -------------"
	eval $lastExeFile
	echo
	exit 0
fi
#输入不为空参数，则新建文件
makeNewFile(){
	inName=$1
	newFileName=$1
	newFileName=${newFileName##*.} #提取文件后缀
	typeFile=$(test $newFileName == "lua" && echo "lua")
	rootPath=$(findRootDir)
	if [ $newFileName == "lua" ];then
		newFilePath="$rootPath/$inName" #新建的目标文件
	else 
		newFilePath="$rootPath/${inName}.lua" #新建的目标文件
	fi
	#生成模板
	if [ ! -f $newFilePath ];then
		fileName=${newFilePath##*/} #得到文件名称
		fileRootDir=${newFilePath%/*}
		echo $fileRootDir
		#当目录路径不存在则创建
		if [ ! -d $fileRootDir ];then
			mkdir -p $fileRootDir
		fi
		echo "#!/usr/bin/env lua" > $newFilePath
		echo "-------------------------------------------------------" >> $newFilePath
		echo "--	FileName	: $fileName">> $newFilePath
		echo "--	Author		：hpy">> $newFilePath
		echo "--	Date		：$(date +%Y年%m月%d日)">> $newFilePath
		echo "--	Description	：">> $newFilePath
		echo "--------------------------------------------------------- ">> $newFilePath
		echo "print(\"hello,world!\")"  >> $newFilePath
		chmod +x $newFilePath
		#将文件保存到dir.file中
		echo "$newFilePath" > $STORE_LAST_FILE
		editPrj $newFilePath #使用编辑器打开并编辑
		return 0
	else
		echo "$inName 文件已经存在！"
		echo "$newFilePath" > $STORE_LAST_FILE
		editPrj $newFilePath
		return 0
	fi
}

makeNewFile $* #新建文件
exit 0
